import axios from "axios";
import { message } from "ant-design-vue";
import router from "../../router/index.js"
import jwt from '../../jwt';
const Request = axios.create({//声明了一个名为request的实例对象 
    baseURL: 'http://localhost:8080',
    timeout: 10000,//超时设置
  });
// 请求拦截器
Request.interceptors.request.use(function (config) {
  const token=localStorage.getItem("Authorization");
  if(!((config.url=="/user/login" || config.url=="/user/register"
     || config.url=="/article/listForAllWithUser" || config.url=="/article/detail"
     || config.url=="/user/userInfoById" || config.url=="/comment/list"
     || config.url=="/article/listById"
    ))){//根据请求路径 是否需要token
    console.log("访问后端url:",config.url)
    console.log("请求头添加token:")
    if(token!=null)//请求头添加token
    {
      console.log("token存在:",token)
      config.headers.Authorization = token;
    }
    else{
      console.log("token不存在")
      message.error('登录信息失效,请重新登录! from请求拦截器');
      router.replace({ path: "/login" });
    }
  }
  console.log("请求信息抛出:",config)
  //返回config
  return config;
}, function (error) {
  console.log("请求拦截器:请求发送失败")
  // 对请求错误做些什么 
  return Promise.reject(error);
});

// 响应拦截器
// 统一处理token过期
Request.interceptors.response.use(function (response) {
  // 2xx 范围内的状态码都会触发该函数。
  return response;
}, function (error) {
  // console.dir(error)
  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么: 比如统一处理token失效
  // 统一处理token失效
  if (error.response.status === 401) {
    // 弹框提示用户
    message.error('登录信息失效,请重新登录! from响应拦截器');
    // 删除缓存
    jwt.logout();
    // 返回登录页
    setTimeout(() => {
      router.replace({ path: "/login" });
    }, 1500)
  }
  return Promise.reject(error);
});

export default Request//默认导出该组件 其他组件导入任意命名